package com.szjz.elasticsearch.eshelper.base.wrapper.service;



import com.szjz.elasticsearch.eshelper.wrapper.ESQueryWrapper;

import java.util.Date;
import java.util.List;

/**
 * @author 史博
 * @desc 按天分库
 * @date 2021/2/28 11:26 周日
 */
public interface DayWrapperService<T> {

	/*====================================================================*/
	/*================================= SAVE =============================*/
	/*====================================================================*/

	/**
	 * 保存or更新
	 */
	Boolean saveOrUpdateAcDay(T t);

	/**
	 * 批量 保存or更新数据
	 * 按照数据的创建时间来分片
	 * ts中的数据创建时间必须是同一月的
	 * docId = _id
	 *
	 * @param ts 数据集合
	 */
	Boolean saveOrUpdateBatchAcDay(List<T> ts);


	/*====================================================================*/
	/*================================ SELECT ============================*/
	/*====================================================================*/

	/**
	 * 通过包装类查询按天分片的索引库集合
	 *
	 * @param wrapper 将要查询的条件封装到wrapper中
	 * @param date    索引库对应的分片时间
	 * @return 某一天的数据集合
	 */
	List<T> selectAcDay(ESQueryWrapper<T> wrapper, Date date);

	/**
	 * 通过包装类查询按天分片的索引库集合
	 *
	 * @param wrapper   将要查询的条件封装到wrapper中
	 * @param startDate 开始时间
	 * @param endDate   结束时间
	 * @return 某一时间段的数据集合
	 */
	List<T> selectAcDay(ESQueryWrapper<T> wrapper, Date startDate, Date endDate);

	/**
	 * 通过包装类查询按天分片的索引库集合
	 *
	 * @param wrapper 将要查询的条件封装到wrapper中
	 * @param date    索引库对应的分片时间
	 * @param size    返回结果集的最大数量
	 * @return 某一天的数据集合
	 */
	List<T> selectAcDay(ESQueryWrapper<T> wrapper, Date date, Integer size);

	/**
	 * 通过包装类查询按天分片的索引库集合
	 *
	 * @param wrapper   将要查询的条件封装到wrapper中
	 * @param startDate 开始时间
	 * @param endDate   结束时间
	 * @param size      返回结果集的最大数量
	 * @return 某一时间段的数据集合
	 */
	List<T> selectAcDay(ESQueryWrapper<T> wrapper, Date startDate, Date endDate, Integer size);

	/**
	 * count
	 * 可用于非等查询
	 *
	 * @param wrapper 将要查询的条件封装到ESQueryWrapper中
	 * @param date    指定要查询的索引库
	 * @return
	 */
	Long countAcDay(ESQueryWrapper<T> wrapper, Date date);

	/**
	 * count
	 * 可用于非等查询
	 *
	 * @param wrapper   将要查询的条件封装到ESQueryWrapper中
	 * @param startDate 指定要查询的索引库的开始时间
	 * @param endDate   指定要查询的索引库的开始时间
	 * @return
	 */
	Long countAcDay(ESQueryWrapper<T> wrapper, Date startDate, Date endDate);


}
